爬虫进阶-RE

第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))


 

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值