python爬取猫眼电影排行

本文分享了使用Python进行爬虫实践的过程,对比了正则、XPath和BeautifulSoup在提取猫眼电影排行榜信息时的优缺点。作者认为BeautifulSoup在代码简洁性和易理解性上更胜一筹,但遇到乱码问题,期待解决方案。

完整的代码如下在这里:https://nbviewer.jupyter.org/github/DRNTT/Spider/blob/master/ch3/maoyan.py
闲着没事,把解析html中的正则方法改用了XPath与BeautifulSoup,只能说各有各的优点吧。
正则的话,提取信息可以连贯,一次性提取出所有需要的信息,当然前提是你的正则式子没有写错,所以说正则写起来相比XPath与BeautifulSoup来说要复杂一下,提取出错后,调试也比较麻烦一下。
XPath的话,相比BeautifulSoup提取信息的时候,比较容易理解,理解好几个规则,提取信息的代码写起来非常流畅也非常快,感觉唯一一点不足就是说在嵌套查询的时候,虽然可以通过下标什么的来定位,但是比起BeautifulSoup的find()与find_all()方法差了很多。
BeautifulSoup:这是我写下来,感觉代码最简单的,也比正则容易理解。本身网页代码的结构就是层层嵌套的,相比前面的两个动不动就是获取所有的匹配节点,这种嵌套查询的方式,感觉更好操作一些。
以上皆为个人观点,若有不对,还请赐教。

XPath提取:

def parse_one_page_XPath(html):
    html = etree.HTML(html)
    rank = html.xpath('//dd/i/text()')
    # print(rank)
    title = html.xpath('//dl//dd/a/@title')
    # print(title)
    star = html.xpath('//p[@class="star"]/text()')
    # print(star)
    relasetime = html.xpath('//p[@class="releasetime"]/text()')
    # print(relasetime)
    s
### 爬取猫眼电影排行前3条数据的实现方法 为了获取猫眼电影排行榜的前三条信息,可以使用Python中的`requests`库来获取网页内容,并结合正则表达式或解析库(如`BeautifulSoup`或`lxml`)提取所需数据。以下是完整的实现过程和代码示例。 #### 1. 获取网页源代码 首先需要通过`requests`库发送HTTP请求,获取目标页面的内容。目标网址为:`http://maoyan.com/board/4`。为了模拟浏览器访问,需要设置请求头`User-Agent`[^4]。 ```python import requests def get_one_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get(url, headers=headers) if response.status_code == 200: return response.text return None ``` #### 2. 解析网页内容 使用正则表达式提取电影名称、时间、评分等信息。以下是一个简单的正则表达式模式,用于匹配电影的相关字段[^2]。 ```python import re def parse_one_page(html): pattern = re.compile( r'<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S ) items = re.findall(pattern, html) for item in items[:3]: # 只提取前三条数据 yield { 'index': item[0], 'image_url': item[1], 'title': item[2].strip(), 'actor': item[3].strip()[3:] if len(item[3]) > 3 else '', 'time': item[4].strip()[5:] if len(item[4]) > 5 else '', 'score': item[5].strip() + item[6].strip() } ``` #### 3. 主函数与结果保存 将上述功能整合到主函数中,并将结果保存到文件中。 ```python def main(): url = "http://maoyan.com/board/4" html = get_one_page(url) if html: results = list(parse_one_page(html)) with open("top3_movies.json", "w", encoding="utf-8") as f: json.dump(results, f, ensure_ascii=False, indent=4) print("数据已保存到 top3_movies.json 文件中") if __name__ == "__main__": import json main() ``` #### 注意事项 - 确保安装了`requests`和`json`模块。 - 如果目标网站增加了反爬虫机制,可能需要处理动态加载内容或使用`Selenium`等工具模拟浏览器行为[^3]。 - 正则表达式的编写需根据实际HTML结构调整。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值