requests + xpath简单示例

本文通过几个小示例,展示了如何利用requests和xpath抓取豆瓣电影TOP 250、豆瓣读书TOP 250、起点中文网免费作品及智联招聘等网站的数据。对于javascript动态生成的内容,如微博,需要借助Chrome开发者工具找到真实请求。总结中提到,对于数据量不大、链接规律明显的场景,requests和xpath足够,但大规模复杂爬取推荐使用scrapy。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几个简单的小示例

豆瓣电影 TOP 250

获取豆瓣电影 TOP 250 的电影信息并保存到 MongoDB 中,这里使用的数据库名为 movies,集合名为 douban。可以使用自己定义的数据库和集合,以下几个示例相同。

import re
import pymongo
import requests
from lxml import etree

def get_page(url):
    """
        Used to get page source code
        @params:
            url - the target url
        @returns:
            html - a etree.HTML instance
    """
    resp = requests.get(url)
    html = etree.HTML(resp.text)
    return html

def get_movies(html):
    """
        Used to crawl movies from a page
        @params:
            html - a etree.HTML instance
    """
    # 使用 xpath 获取当前页所有电影条目信息
    items = html.xpath('//ol[@class="grid_view"]/li')
    for item in items:
    # 遍历当前页所有电影条目,继续通过 xpath 获取详细信息
        movie = {
   
   }
        movie['title'] = del_space(item.xpath('.//span[@class="title"]/text()'))
        movie['info'] = del_space(item.xpath('.//div[@class="bd"]/p[1]/text()'))
        movie['rating'] = item.xpath('.//span[@class="rating_num"]/text()')[0]
        movie['review_num'] = item.xpath('.//div[@class="bd"]/div/span[4]/text()')[0]
        quote = del_space(item.xpath('.//div[@class="bd"]/p[2]//text()'))
        # 因为有的电影不存在 quote,所以需要判断获取的 quote 是不是空列表
        movie['quote'] = quote[1] if len(quote) > 1 else ""
        # 打印电影信息
        print(movie)
        # 保存到数据库中
        save_movie(movie)

def del_space(items):
    """
        Used to delete extra space from a list and then return it
        @params:
            items - a list instance
    """
    # 使用正则表达式删除空白符并返回
    return [re.sub(r'\s', '', item) for item in items]

def save_movie(movie):
    """
        Used to save a movie
        @params:
            movie - a dict instance
    """
    client = pymongo.MongoClient('localhost')
    collection = client['movies']['douban']
    collection.insert_one(movie)

def main():
# 每一页 url 的变化很明显,只有 start 参数在改变,所以直接通过循环抓取所有电影信息
    base_url = 'https://movie.douban.com/top250'
    # 抓取所有页面的电影
    for i in range(10):
        page = get
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值