Python 爬虫:xpath多线程抓取豆瓣电影top250影片名

多线程抓取豆瓣top250,其实数据量不多,单线程完全够用,初学多线程抓取,就当练练手好了,下次换个数据量大的网页来抓取

import requests
from lxml import etree
import time
from concurrent.futures import ThreadPoolExecutor


def download_one_page(url, headers):
    # 拿到页面源代码

    resp = requests.get(url=url, headers=headers)
    html = etree.HTML(resp.text)
    divs = html.xpath('//*[@id="content"]/div/div[1]/ol/li')

    # time.sleep(0.5)

    for div in divs:
        movie_name = div.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
 

        print(movie_name)


if __name__ == '__main__':

    start_time = time.time()
    headers = {"User-Agent":
                   "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"}
	
	#开启线程池,10个线程
    with ThreadPoolExecutor(10) as t:

        for i in range(0, 251, 25):
            url = f"https://movie.douban.com/top250?start={i}&filter="
            t.submit(download_one_page, url, headers)

            # download_one_page(url,headers)

    final_time = time.time()
    cost_time = final_time - start_time
    print("---------" * 10)
    print("完成,一共耗时" + str(cost_time) + 's')

可以看到多线程抓取网页数据速度确实很快,1s不到全部抓取完毕

在这里插入图片描述

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用Python爬取豆瓣电影Top250数据的步骤: 1. 导入所需的库,包括requests、BeautifulSoup和pandas。 2. 使用requests库向豆瓣电影Top250网页发送请求,并获取响应。 3. 使用BeautifulSoup库解析响应内容,提取出电影名称、评分、导演、主演、年份、国家和类型等信息。 4. 将提取出的信息存储到pandas的DataFrame中,并将DataFrame保存为CSV文件。 5. 可以使用多线程或异步请求等技术来提高爬取速度。 以下是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup 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/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) # 解析响应内容 soup = BeautifulSoup(response.text, 'html.parser') movies = soup.find_all('div', class_='info') data = [] for movie in movies: title = movie.find('span', class_='title').text rating = movie.find('span', class_='rating_num').text director = movie.find('p').text.split('\n')[1].strip().split(':')[1] actors = movie.find('p').text.split('\n')[2].strip().split(':')[1] year = movie.find('p', class_='').text.split('\n')[1].strip().split('/')[0] country = movie.find('p', class_='').text.split('\n')[1].strip().split('/')[1] genre = movie.find('p', class_='').text.split('\n')[1].strip().split('/')[2] data.append([title, rating, director, actors, year, country, genre]) # 存储数据到CSV文件 df = pd.DataFrame(data, columns=['电影名称', '评分', '导演', '主演', '年份', '国家', '类型']) df.to_csv('douban_top250.csv', index=False, encoding='utf-8-sig') # 输出前10条数据 print(df.head(10)) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值