爬虫入门2

正则表达式

暂时先略

Xpath

。。。。。。

豆瓣250爬取实例

1.导入库,发起网络请求

网站地址:豆瓣电影 Top 250 (douban.com)

import requests
from lxml import etree

url = "https://movie.douban.com/top250"
headers = {
    'User-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
}

res = requests.get(url=url, headers=headers)
print(res.status_code)

 打印结果200,说明请求成功

2.解析数据

在网页中定位

每页有25个电影,用列表lis,存储Xpath。我们如果要爬取这一页,打印lis长度的话应为25

html = etree.HTML(res.text)#在这解析
lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
print(len(lis))#观察长度

解析

for li in lis:
    # .表示当前位置,
    title = li.xpath('./div/div[2]/div[1]/a/span[1]/text()')#电影名称
    src = li.xpath('./div/div[2]/div[1]/a/@href')#详情连接
    director = li.xpath('./div/div[2]/div[2]/p[1]/text()')[0].strip()#删去字符串两边的空格,/导演/
    score = li.xpath('./div/div[2]/div[2]/div/span[2]/text()')#评分
    comment = li.xpath('./div/div[2]/div[2]/div/span[4]/text()')  # 评价人数
    summary = li.xpath('./div/div[2]/div[2]/p[2]/span/text()')  # 一句话评价

    print(title[0],src[0],director,score[0],comment[0],summary[0])

3.爬取豆瓣top250

(1)分析url特点

可以看到,只有后面0/25/50/225是不同的,用一个列表,将十个不同的url保存到列表中

urls = urls = ['https://movie.douban.com/top250?start={}&filter='.format(str(i * 25)) for i in range(10)]
for url in urls:
    print(url)#验证,是否能得到url地址

循环爬取十页信息

urls = urls = ['https://movie.douban.com/top250?start={}&filter='.format(str(i * 25)) for i in range(10)]
i = 0#用于计数
for url in urls:
    # print(url)#验证,是否能得到url地址
    html = etree.HTML(res.text)  # 在这解析
    lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
    for li in lis:
        # .表示当前位置,
        title = li.xpath('./div/div[2]/div[1]/a/span[1]/text()')  # 电影名称
        src = li.xpath('./div/div[2]/div[1]/a/@href')  # 详情连接
        director = li.xpath('./div/div[2]/div[2]/p[1]/text()')[0].strip()  # 删去字符串两边的空格,/导演/
        score = li.xpath('./div/div[2]/div[2]/div/span[2]/text()')  # 评分
        comment = li.xpath('./div/div[2]/div[2]/div/span[4]/text()')  # 评价人数
        summary = li.xpath('./div/div[2]/div[2]/p[2]/span/text()')  # 一句话评价
        print(title[0], src[0], director, score[0], comment[0], summary[0])
        i+=1
print(i)#观察是否爬取了250个电影

4.将爬取信息导入Excel,并附上完整代码

import requests
from lxml import etree
import pandas as pd

url = "https://movie.douban.com/top250"
headers = {
    'User-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
}

res = requests.get(url=url, headers=headers)
print(res.status_code)#观察是否请求成功

urls = urls = ['https://movie.douban.com/top250?start={}&filter='.format(str(i * 25)) for i in range(10)]
df=pd.DataFrame(columns=["序号","标题","链接","导演","主演","上映时间","制片国家","电影类型","评分","评价人数","简介"])#创建标题
i = 0#用于计数
for url in urls:
    # print(url)#验证,是否能得到url地址
    html = etree.HTML(res.text)  # 在这解析
    lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
    for li in lis:
        # .表示当前位置,
        title = li.xpath('./div/div[2]/div[1]/a/span[1]/text()')  # 电影名称
        src = li.xpath('./div/div[2]/div[1]/a/@href')  # 详情连接
        director = li.xpath('./div/div[2]/div[2]/p[1]/text()')[0].split("   ")[0].strip("'\n                             ").strip("导演: ")  # 删去字符串两边的空格,/导演/
        actor = li.xpath('./div/div[2]/div[2]/p[1]/text()')[0].split("   ")[1].strip("主演: ")  # 主演,一人
        time = li.xpath('./div/div[2]/div[2]/p[1]/text()[2]')[0].strip("\n                            ").split("\xa0/\xa0")[0]#上映时间
        country = li.xpath('./div/div[2]/div[2]/p[1]/text()[2]')[0].strip("\n                            ").split("\xa0/\xa0")[1]#制片国家
        movie_genres = li.xpath('./div/div[2]/div[2]/p[1]/text()[2]')[0].strip("\n                            ").split("\xa0/\xa0")[2]#电影类型
        score = li.xpath('./div/div[2]/div[2]/div/span[2]/text()')  # 评分
        comment = li.xpath('./div/div[2]/div[2]/div/span[4]/text()')  # 评价人数
        summary = li.xpath('./div/div[2]/div[2]/p[2]/span/text()')  # 一句话评价
        df.loc[len(df.index)]=[i,title[0], src[0], director,actor,time,country,movie_genres,score[0], comment[0], summary[0]]
        i+=1
df.to_excel("movies.xlsx")
print(i)#观察是否爬取了250个电影

注意代码中的返回类型

爬虫入门1-CSDN博客

python爬虫实战代码(一)_df.loc[len(df.index)]=[count,title,src,dictor,scor-CSDN博客

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值