python-爬虫

------------恢复内容开始------------

获取数据的方式:

企业生产的用户数据
数据管理咨询公司
政府/机构提供的公开数据
第三方数据平台购买数据
爬虫爬取数据

requests模块

resp.text返回的是Unicode型的数据。

resp.content返回的是bytes型也就是二进制的数据。

也就是说,如果你想取文本,可以通过r.text。

如果想取图片,文件,则可以通过r.content。

import requests
# 1.指定url
url = 'https://www.sogou.com/'   # 不带参数

# 2.发起一个get请求,get方法会返回 请求成功后的响应对象
response = requests.get(url=url)

# 3.获取响应中的数据值:text可以获取响应对象中的字符串形式的页面数据
page_data = response.text
#print(page_data)

# 持久化操作
with open('./sogou.html','w',encoding='utf-8')as f:
    f.write(page_data)
get请求
# 将参数封装到字典中
params = {'query':'周杰伦','ie':'utf8'}
# 自定义请求头信息
# 此处用的百度的UA
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

# 拿到响应对象
response = requests.get(url=url,params=params,headers=headers)

post请求
# 封装post请求的参数
data = {
'source':'movie',
'redir':'https://movie.douban.com/',
'form_email':'你的豆瓣邮箱',
'form_password':'你的登录密码',
'login':'登录',
}
response = requests.post(url=url,data=data,headers=headers)

发送cookies:需要登陆验证的网站需要带上cookies

 代理ip

import requests
# https://www.dogedoge.com/results?q=ip
url = 'https://www.dogedoge.com/results?'
params = {'q':'ip'}


headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
# 将代理ip封装到字典中
proxy = {
    'http':'117.88.176.110:3000'
}
# 更换网络ip,发起请求之前 response = requests.get( url=url,proxies=proxy,headers=headers,params=params) with open('./daili2.html','w',encoding='utf-8')as f: f.write(response.text)

xpath里如何定义包含一个或多个class属性

 xpath解析

# 打印文本值
px3 = html.xpath('/html/head/title/text()')# 在路径表达式中使用text()方法
print(px3[0])
px4 = html.xpath('/html/head/title') # 返回的是元素节点
print(px4[0].text)# 用元素节点的text属性打印

px5 = html.xpath('/html/body/div/p')#p元素组成的列表
for p in px5:
    print(p.text)

 爬取数据存入数据库

(1)单行存储

(2)批量存储

#建立连接
conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1qaz#EDC',db='test_db')
cur = conn.cursor()

#对数据进行操作
li = [('tanzhenx','shaoguan'),('huangmengdie','shaoguan')] #定义一个列表,列表中含多个元组,等会批量插入每个元组中的数据
cur.executemany('insert into user (name,address) values(%s,%s)',li) #批量插入数据
conn.commit()   #提交请求,否则数据是不会写入数据库里
#关闭数据库连接
cur.close()
conn.close()

 动态爬取数据

------------恢复内容结束------------

原文地址:https://www.cnblogs.com/foremostxl/p/11829482.html