让我详细讲解一下“详解使用Selenium爬取豆瓣电影前100的爱情片相关信息”的完整攻略。
1. 环境搭建
首先,需要安装好Selenium和ChromeDriver。Selenium是Python中的一个web自动化测试工具,可以模拟浏览器行为,而ChromeDriver是Selenium对Chrome浏览器的驱动。
你可以通过pip安装Selenium:
pip install selenium
然后去ChromeDriver的官网下载对应版本的驱动,并将其加入系统的PATH中。可以使用下面的代码来测试是否安装成功:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
如果成功打开了百度网页,说明环境搭建成功。
2. 爬取豆瓣电影前100的爱情片
首先,我们需要进入豆瓣电影爱情片前100的网页,使用Selenium模拟点击下一页按钮,并循环爬取每一页的电影信息。代码如下:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://movie.douban.com/top250?start=0&filter=")
movies = []
while True:
ul = driver.find_element_by_xpath('//ol[@class="grid_view"]')
all_li = ul.find_elements_by_xpath('.//li[@class=""]')
for li in all_li:
movie = {}
title = li.find_element_by_xpath('.//span[@class="title"]')
movie['title'] = title.text
bd = li.find_element_by_xpath('.//div[@class="bd"]')
bd_contents = bd.text.split('\n')
movie['director'] = bd_contents[0].split(' ')[1]
movie['actors'] = bd_contents[1][3:]
movie['score'] = li.find_element_by_xpath('.//span[@class="rating_num"]')\
.text
movie['quote'] = li.find_element_by_xpath('.//span[@class="inq"]')\
.text
movies.append(movie)
try:
next_page = driver.find_element_by_xpath('//span[@class="next"]/a')
driver.execute_script("arguments[0].click();", next_page)
except:
break
driver.quit()
在上面的代码中,我们使用find_element_by_xpath方法来获取网页上的元素,有了这些元素之后,我们就可以提取出每部电影的标题、导演、演员、评分以及简介等信息。可以看到,我们把每部电影的信息都存储在一个字典中,再将所有电影的字典存储在了一个列表中。这样,我们就得到了所有电影的信息。
3. 保存到本地
接下来,把获取的电影信息保存到本地文件中。代码如下:
import json
with open('movies.json', 'w', encoding='utf-8') as f:
json.dump(movies, f, ensure_ascii=False)
运行完毕后,你会在当前脚本所在目录下,看到一个movies.json文件。打开它,即可看到所有电影的信息已经保存到这个文件中。
示例1
下面,我们来演示如何获取每部电影的海报,并保存到本地文件中。代码如下:
from selenium import webdriver
import urllib.request
driver = webdriver.Chrome()
driver.get("https://movie.douban.com/top250?start=0&filter=")
while True:
ul = driver.find_element_by_xpath('//ol[@class="grid_view"]')
all_li = ul.find_elements_by_xpath('.//li[@class=""]')
for li in all_li:
title = li.find_element_by_xpath('.//span[@class="title"]')
img_url_raw = li.find_element_by_xpath('.//img')\
.get_attribute('src')
img_url = img_url_raw[:-7]
img_url += 'jpg'
urllib.request.urlretrieve(img_url, title.text + '.jpg')
try:
next_page = driver.find_element_by_xpath('//span[@class="next"]/a')
driver.execute_script("arguments[0].click();", next_page)
except:
break
driver.quit()
在上面的代码中,我们使用了urllib库自动下载海报,并将其保存到本地文件中。
示例2
下面,我们来演示如何用Selenium自动登录微博,并爬取自己的微博信息。代码如下:
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://weibo.com")
login_link = driver.find_element_by_xpath('//a[@class="gn_login"]')
driver.execute_script("arguments[0].click();", login_link)
time.sleep(5)
username_input = driver.find_element_by_xpath('//input[@name="username"]')
password_input = driver.find_element_by_xpath('//input[@name="password"]')
submit_btn = driver.find_element_by_xpath('//a[@action-type="btn_submit"]')
username_input.send_keys("你的微博账号")
password_input.send_keys("你的微博密码")
submit_btn.click()
time.sleep(10)
driver.get('https://weibo.com/u/你的微博ID?is_all=1')
weibo_contents = driver.find_elements_by_xpath('//div[@class="WB_text W_f14"]')
for i, content in enumerate(weibo_contents):
print('微博 %d:' % i)
print(content.text)
print()
driver.quit()
在上面的代码中,我们先通过find_element_by_xpath方法获取到了登录链接,并用execute_script模拟点击进行登录。之后等待5秒钟,直到弹出账号密码填写界面,然后自动填写账号密码并点击提交按钮完成登录。最后访问自己的微博主页,提取出所有微博的文本内容并打印出来。
这就是使用Selenium爬取豆瓣电影前100的爱情片相关信息的完整攻略,希望能够帮到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解使用Selenium爬取豆瓣电影前100的爱情片相关信息 - Python技术站