python爬取当当网图书信息

数据提取

使用Python提取本地HTML文件中的内容

获取HTML文件中的内容 读取这个HTML文件,然后获得这个文件所有内容,在进行提取
读取文件open()

with open('ht1.html', 'r', encoding='UTF-8') as f:
    html_data = f.read()
    print(html_data)

XML 可扩展标记语言

Xpath XML path language 用于提取 文档中的元素
使用Lxml库来实现xpath语法提取
安装 Lxml

pip install Lxml
  • 从html_data中提取 欢迎来到王者这个标题
from lxml import html
selector = html.fromstring(html_data)
h1 = selector.xpath('/html/body/h1/text()')
print(h1)
  • 获取p内容
selector = html.fromstring(html_data)
p = selector.xpath('/html/body/p/text()')
print(p)

总结:以上使用xpath用起来比较麻烦,类似于绝对路径
我们常常使用下面的语法格式
1.获取文本(也就是获取标签中的内容,标签对中间夹的部分)

< a href=" www.baidu.com">点击跳转至百度
//代表从任意位置出发 []内的属性 是对前面标签的约束,保障唯一性
//标签1[@属性1 = "属性值1"]/标签2[@属性2 = "属性值2"]/.../text()

1)获取a标签中的内容

    a = selector.xpath('//div[@id="container"]/a[1]/text()')[0]
    print(a)

2)点击跳转至新浪

sina = selector.xpath('//div[@id="conainer"]/a[2]/text()')
sina = sina[0]
print(sina)

2.获取属性值

//标签1[属性1 = "属性值1"]/标签2[属性2 = "属性值2"]/.../@属性名
  • 获取鲁班七号详情网址
m = selector.xpath('//div[@id="lu"]/a[1]/@href')
print(m)

访问服务器端的前端代码

使用的是requests

pip install requests   #安装requests
import requests  #导入
url = 'https://www.baidu.com'
response = requests.get(url)   #获取响应
print(response)   #200代表响应成功代码
response.encoding = 'utf-8'  #修改编码方式
data = response.text
print(data)
with open('baidu.html','w',encoding='UTF-8')as f:    # 写入本地 'w' write 写入
    f.write(data)
data_content = response.content
print(data_content)
  • response.content和 response.text 的区别
  1. response.text
    返回类型:str
    解码类型 根据http头部对响应的编码做出有根据的推测,推测文本编码
    修改编码方式:response.encoding = 'utf-8'

  2. response.content
    返回类型:bytes
    解码类型 没有指定
    修改编码方式:response.content.decode('utf-8')

  • 访问知乎
url = 'http://www.zhihu.com'
res = requests.get(url)
print(res.status_code)  
# 400    400表示请求失败
#添加headers
#为什么添加headers?
#模拟浏览器访问,欺骗服务器,获取与浏览器一致的内容
#headers 的形式:字典


# 添加header的知乎
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
# User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
response = requests.get(url, headers=headers)
print(response.status_code)  
# 200 200代表成功了

*爬取当当网图书信息爬虫

from lxml import html
import requests
def spider(isbn):
    """爬取当当网图书信息爬虫"""
    # isbn   国际标准书号
    url="http://search.dangdang.com/?key={}&act=input".format(isbn)
    print(url)

    #获取网页的源代码
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"}
    #Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
    html_data = requests.get(url, headers=headers).text

    #使用xpath语法
    selector = html.fromstring(html_data)
    #爬取所有书籍的标题
    ul_list = selector.xpath('//div[@id="search_nature_rg"]/ul/li')
    print('有{}家商铺售卖此书'.format(len(ul_list)))
    #遍历
    for li in ul_list:
        title = li.xpath('a/@title')
        print(title)
        #获取所有购买链接
        link = li.xpath('a/@href')[0]
        print(link)
        #获取价格
        price = li.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')[0]
        #去掉¥
        price = price.replace('¥', ' ')
        print(price)
isbn = input('请输入您要查询的书号')
spider(isbn)

你可能感兴趣的:(python爬取当当网图书信息)