Python爬虫--迭代入门

爬虫:核心是对网站的url接口进行操作
原理:用户在与网站交互的信息,都是以链接的形式向后台提交,因此,只要分析网站提交的连接形式,就可以用程序模拟用户查询的操作,便可以得到数据,下一步进行解析,最后输出保存。

一、原生版

Q1:网络请求的实现

  1. Request库
import requests
url = "https://item.jd.com/100001860765.html"
try:
    r = requests.get(url)  # 定义response对象r,它包含request请求,可以查看它的头部
    r.raise_for_status()  # status_code 是 200 时,成功请求。如果是失败请求,会通过这个函数抛出异常(翻译:根据状态唤起)
    r.encoding = r.apparent_encoding  # 指定request的编码,改成可以阅读的
    print(r.text[:200])  #打印内容
    print(r.request.headers)
except:
    print("爬取失败")  # 异常处理

Q2:伪装用户的浏览器,发起http请求
网站接收由浏览器发起的http请求,有的网站会进行来源审查,拒绝网络爬虫。这里User-Agent告诉了对方网站自己是python程序产生的。
step 1:
response对象包含了发出的request对象,可以查看发出去的请求头

print(r.request.headers)  # 发出的http请求的头部信息,内容如下:
{'User-Agent': 'python-requests/2.21.0'……}

step 2:
request库,可以更改头部信息。
即实现让程序去模拟浏览器,去发送请求。

	kv = {'User-Agent': 'Mozilla/5.0'}  # 重新定义一个键值对,Mozilla/5.0是浏览器的身份标识
    r = requests.get(url, headers = kv)  # 定义response对象r,它包含request请求,可以查看它的头部,并对headers的字段修改
    

Q3:程序实现向搜索引擎提交关键词,实现自动搜索。
step1:搜索引擎关键词提交接口
百度的关键词接口:http://www.baidu.com/s?wd=keyword

step2:问题转换为–>构造一个这样的url

kv = {'wd': 'python是什么'}
url = "http://www.baidu.com/s"
r = requests.get(url, params=kv)

打印信息:
print(r.status_code)
print(r.request.url)

返回结果:
200
http://www.baidu.com/s?wd=python%E6%98%AF%E4%BB%80%E4%B9%88

Q4:爬取图片
step 1: 分析网页图片的地址格式,以.jpg等结尾
http://img0.dili360.com/pic/2019/03/06/5c7f6fb5a077c9494825493.jpg

step 2:图片是二进制格式,保存为文件时用二进制方式。
截取图片名称,创建文件目录,定义存储图片路径。

step 3:
文件操作

import requests
import os # os库
url = "http://img0.dili360.com/pic/2019/03/06/5c7f6fb5a077c9494825493.jpg"
root = "D://picSpider//"
path = root + url.split('/')[-1]  # 字符串的splite()函数,按照'/'截取,返回列表对象。
try:
    if not os.path.exists(root):  # 如果目录不存在,创建目录
        os.mkdir(root)
    if not os.path.exists(path):  # 如果图片不存在,爬取图片
        r = requests.get(url)
        with open(path, 'wb') as f:  # 以二进制格式打开一个文件,用于写入。如果path的文件不存在,自动创建文件。打开的文件,命名为f
            f.write(r.content)  # r.content是返回数据的二进制形式。将二进制数据写入文件
            f.close()  # 关闭文件
            print("图片保存成功!")
    else:
        print("图片已经存在!")
except:
    print("爬取失败!")


Q5:解析得到的HTML文件

  1. Beautiful Soup库:[HTML的解析器]
    python3.7安装BeautifulSoup4,引入时用bs4,从库里边只导入BeautifulSoup类,就可以用BeautifulSoup解析HTML 5格式、CSS格式的源代码

step1:BeautifulSoup的使用

from bs4 import BeautifulSoup
soup = BeautifulSoup(‘这里放HTML’, 'html.parser') 

比如:
soup1 = BeautifulSoup("<html>data</html>", 'html.parser')
soup2 = BeautifulSoup(open("D://demo.html"), 'html.parser')

step 2:与网络请求结合

from bs4 import BeautifulSoup
import requests
url = 'https://item.jd.com/100003302532.html'  # 页面url
r = requests.get(url)
demo = r.text[:1000]
soup = BeautifulSoup(demo, 'html.parser')  #一行代码搞定
print(soup)

step 3: 遍历解析好的HTML标记信息
HTML文件是树形结构,文档对应标签树(BeautifulSoup类),就是这里的soup。
遍历方式:从上至下,从下至上,层次遍历

基本元素使用说明
Tagsoup.标签名
Namesoup.标签名.name
NavigableStringsoup.标签名.string
下行遍历上行遍历层次遍历
.contents.parent.next_sibling
.children.parents.previous_sibling
.contents.next_siblings
.descendants.previous_siblings
print(soup.prettify())
for link in soup.find_all('link'):
    print(link.get('href'))

小结:

  1. python语法
    python对大小写敏感
    python异常处理的框架:try–except
    python 3编码格式:utf-8
    文件路径,用双斜杠’D://picSpider’
    函数
    string的
    splite()

  2. file库【file库,可以处理文件等操作】
    open(path,‘wb’) as f:
    f.write()
    f.close()

  3. requests库 【requests库,可以处理网络请求等操作】
    requests.get()
    get()中的参数:params= , headers=,
    response对象:
    r.status_code
    r.text
    r.raise_for_status()管理触发异常
    r.encoding=r.apparent_encoding
    r.request.url
    r.request.headers
    r.content 是返回内容的二进制形式

  4. os库 【os库,可以处理文件目录等操作。】
    os.path.exists(path)
    os.mkdir(root)

  5. BeautfulSoup库 【bs4库,可以处理HTML格式解析等操作。】
    soup.prettify() #输出友好的标记信息
    #bs4的内容编码:utf-8,和Python3没有编码障碍

Selenium

Selenium是浏览器测试工具。可以实现爬虫。

Q1:安装

step1:cmd命令行下,输入pip install selenium
step2:下载火狐浏览器驱动geckodriver.exe,放到Firefox安装目录下
step3:在环境变量Path中添加Firefox安装目录的路径:C:\Program Files\Mozilla Firefox;
step4:重启pycharm,然后运行程序即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值