705-爬虫

使用过简单的 python 爬虫(太极拳排名、静态小说等非登录认证的静态网页,且没有加密)

有一个静态页面的投票网站,我们需要获取不同人员的投票数,然后进行分析,找出最大值,中值,平均值等数据(复杂分析暂时不会)

基本思路:

1、使用 request 库模拟请求,浏览器返回 HTML 结果

2、使用 BS4 库处理爬取的 HTML,把字符串转换数据结构,并找到需要的标签(例如 script li 等)

3、数据处理(求最值,求平均值等),使用 io 模块写入本地的 txt 文件(如果是复杂的文件,可能使用 excel 或者 spss 软件进行数据分析,这是后续的过程)

前端的反思:反爬虫策略

1、增加登录验证,减少对静态界面爬取。

2、使用 canvas img 等复杂元素节点,例如百度文库,这个给爬虫后续处理增加难度。

3、文本编辑时,界面添加很多脏文本,就是不显示在界面上的特殊符号,然后被后端爬取到。或者 HTML 文本先加密,然后 JS 代码进行解密。这个在很多购物网站中使用,例如美团。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 请求库
import requests

# 解析库
from bs4 import BeautifulSoup

# 用于解决爬取的数据格式化
import io
import sys

# 设置爬取的默认字符编码(这是python2的reload函数,python3应该使用新语法)
reload(sys)
sys.setdefaultencoding('utf8')

# 爬取的网页链接
r= requests.get("http://jsqg.sports.cn/index.php?s=/home/index/index/p/1.html")

# 中文显示
r.encoding='utf-8'
r.encoding=None
result = r.text

# 再次封装,获取具体标签内的内容
bs = BeautifulSoup(result,'html.parser')

# 具体标签
print("解析后的数据")
# print(bs.span)
a={}
# 获取已爬取内容中的script标签内容
data=bs.find_all('script')
# 获取已爬取内容中的td标签内容
data1=bs.find_all('li')

# 将爬取后的数据写入文件
filename = 'test_text.txt'
with open(filename, 'w') as file_object:
    for j in data1:
        file_object.write("%s\n" % (j.text))

实际上爬虫很复杂,是专门的一个方向,可以参考博客:

https://nanmicoder.github.io/CrawlerTutorial/%E7%88%AC%E8%99%AB%E5%85%A5%E9%97%A8/01_%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%86%99%E8%BF%99%E4%B8%AA%E7%88%AC%E8%99%AB%E6%95%99%E7%A8%8B.html

https://nanmicoder.github.io/CrawlerTutorial/%E7%88%AC%E8%99%AB%E5%85%A5%E9%97%A8/01_%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%86%99%E8%BF%99%E4%B8%AA%E7%88%AC%E8%99%AB%E6%95%99%E7%A8%8B.html