第1关:单网页爬取
任务描述
本关任务:编写一个爬虫,爬取 www.jd.com 网的 title。
编程要求
请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,编写一个爬虫,爬取 www.jd.com 网的 title ,具体要求如下:
- 获取 www.jd.com 的页面 html 代码并保存在 ./step1/京东.html;
-
使用正则提取 title;
-
将 title 的内容保存为 csv 文件,位置为 ./step1/csv_file.csv。
代码 :
方法一:RE
import urllib.request import csv import re #打开京东,读取并爬到内存中,解码, 并赋值给data #将data保存到本地 # ********** Begin ********** # data = urllib.request.urlopen("https://www.jd.com").read().decode("utf-8", "ignore") with open("./step1/京东.html", 'a') as f: f.write(data) # ********** End ********** # #使用正则提取title #保存数据到csv文件中 # ********** Begin ********** # pattern = "<title>(.*?)</title>" title = re.compile(pattern, re.S).findall(data) with open("./step1/csv_file.csv", 'a') as f: f_csv = csv.writer(f) f_csv.writerow(title) # ********** End ********** #
方法二:bs4
import csv import requests from bs4 import BeautifulSoup url = "https://www.jd.com" r = requests.get(url) r.encoding = 'utf-8' with open("E:\pythonProject1\大数据采集\RE\京东.html", 'w', encoding='utf-8') as f: f.write(r.text) soup = BeautifulSoup(r.text, "html.parser") title = soup.find('title').text # 将标题文本按字符分割,并写入CSV文件 with open("E:\pythonProject1\大数据采集\RE\csv_file.cs44", 'w', encoding='utf-8', newline='') as f: f_csv = csv.writer(f) f_csv.writerow(list(title))
第3关:爬取与反爬取进阶
任务描述
本关任务:使用随机请求头爬取 www.qiushibaike.com/text/ 前两页的段子内容,并保存在 ./step4/content.txt 中。
相关知识
在反爬机制中,许多网站会通过 ip 以及请求头来限制你的访问,在不影响网站正常运作的情况下,我们可以使用 ip 代理池以及随机请求头来伪装自己的爬虫,其中需要用到的就是 python 的 random 模块。
编程要求
请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,使用随机请求头爬取 www.qiushibaike.com/text/ 前两页的段子内容,并保存在 ./step4/content.txt 中。
代码
import urllib.request
import re
import random
# 请求头
uapools = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
]
def UA():
# 使用随机请求头
opener = urllib.request.build_opener()
thisua = random.choice(uapools)
ua = ("User-Agent", thisua)
opener.addheaders = [ua]
urllib.request.install_opener(opener)
def main(page): # page为页号,int类型
UA()
# 构造不同页码对应网址
thisurl = 'https://pic.netbian.com/4kyingshi/index_{}.html'.format(page + 1)
data = urllib.request.urlopen(thisurl).read().decode("utf-8", "ignore")
# 利用<img src="(.*?)"提取图片内容
pat = '<img src="(.*?)"'
rst = re.compile(pat, re.S).findall(data)
with open("./step4/content.txt", "a", encoding="utf-8") as f:
f.write("\n".join(rst))