Java爬取豆瓣电影排行Top250

二、引入依赖


org.jsoup

jsoup

${latest.version}

三、源代码


代码并不多,通过URL地址获取HTML文本内容,并进行解析。

在这里插入图片描述

public class JsoupTest {

public static void main(String[] args) throws IOException {

// 要爬取的网址url链接列表

List list = new ArrayList<>();

for (int i = 0; i <= 225; i += 25) {

String url = “https://movie.douban.com/top250?start=” + i + “&filter=”;

list.add(url);

}

// 遍历url列表,爬取网页数据

for (String urlStr : list) {

Document doc = Jsoup.connect(urlStr)

.maxBodySize(Integer.MAX_VALUE)

.userAgent(“Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36”)

.timeout(6000)

.get();

Element co

使用多线程爬取豆瓣电影排行榜可以显著提高爬取效率。以下是一个示例代码,展示了如何使用Python的多线程库`threading`来爬取豆瓣电影排行榜。 ```python import requests import threading from bs4 import BeautifulSoup import time class MovieScraper(threading.Thread): def __init__(self, url, results, lock): threading.Thread.__init__(self) self.url = url self.results = results self.lock = lock def run(self): response = requests.get(self.url) soup = BeautifulSoup(response.text, 'html.parser') movies = soup.find_all('div', class_='hd') for movie in movies: title = movie.find('span', class_='title').text with self.lock: self.results.append(title) def scrape_movies(urls): threads = [] results = [] lock = threading.Lock() for url in urls: thread = MovieScraper(url, results, lock) threads.append(thread) thread.start() for thread in threads: thread.join() return results if __name__ == "__main__": base_url = 'https://movie.douban.com/top250?start=' urls = [base_url + str(i) for i in range(0, 250, 25)] start_time = time.time() movies = scrape_movies(urls) end_time = time.time() print(f"Scraped {len(movies)} movies in {end_time - start_time} seconds") for movie in movies: print(movie) ``` ### 代码解释 1. **导入库**: - `requests`: 用于发送HTTP请求。 - `threading`: 用于创建和管理线程。 - `BeautifulSoup`: 用于解析HTML内容。 - `time`: 用于计算爬取时间。 2. **MovieScraper类**: - 继承自`threading.Thread`,用于定义每个线程的工作内容。 - `__init__`: 初始化线程,传入URL、结果列表和锁。 - `run`: 重写`run`方法,发送请求并解析HTML,提取电影标题。 3. **scrape_movies函数**: - 创建线程列表、结果列表和锁。 - 创建并启动每个线程。 - 等待所有线程完成。 4. **主程序**: - 定义豆瓣电影排行榜的URL列表。 - 调用`scrape_movies`函数并记录时间。 - 打印结果。 ### 相关问题 1. 什么是多线程? 2. 什么是线程锁(Lock)? 3. 如何使用`requests`库发送HTTP请求? 4. 如何使用`BeautifulSoup`解析HTML内容? 5. 为什么使用多线程可以提高爬取效率?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值