import requests import re def getHTMLText(url): try: headers={'User - Agent': 'Mozilla/5.0 (Window NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/77.0.3865.120 Safari/537.36 chrome-extension'} r=requests.get(url,headers=headers) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: print("Erro_get") #用于提取所需的电影信息 def parsePage(ilt,html): tlt=re.findall(r'data-title\=\".* ?\"',html) for i in range(len(tlt)): plt=eval(tlt[i].split('=')[1]) if plt in ilt: pass else: ilt.append(plt) def printInfo(ilt): print("上 海 热 映") for i in ilt: print(i) def main(): url='https://movie.douban.com/cinema/nowplaying/shanghai/' list=[] html=getHTMLText(url) parsePage(list,html) printInfo(list) main()
时间: 2024-04-28 08:19:27 浏览: 168
这段代码是用 Python 实现的一个爬虫程序,目的是爬取豆瓣网上正在上映的电影信息,并将其输出到控制台上。程序首先通过 requests 库向目标网址发送 HTTP 请求,获取网页源代码,然后利用正则表达式提取出电影信息。最后将提取出的信息存入列表中,并输出到控制台上。该程序实现了三个函数,分别是 getHTMLText、parsePage 和 printInfo。其中 getHTMLText 函数用于获取网页源代码,parsePage 函数用于提取电影信息,printInfo 函数用于输出电影信息。程序的主函数 main 调用这三个函数完成整个爬虫过程。
相关问题
帮我优化一下代码:import requests from lxml import html url = "https://www.baidu.com" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) html_tree = html.fromstring(response.content) titles = html_tree.xpath('//ul[@class="s-hotsearch-content"]/li/a/text()') print(titles)
以下是对给定代码的优化建议:
1. 可以将导入的库放在一起,提高代码的可读性。
2. 可以使用更具体的XPath路径表达式来获取标题,以提高代码的准确性。
3. 可以将获取标题的逻辑提取为一个函数,以便复用和测试。
4. 可以添加适当的错误处理机制,防止因异常情况导致程序中断。
下面是优化后的代码示例:
```python
import requests
from lxml import html
def get_titles(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # 检查请求是否成功
html_tree = html.fromstring(response.content)
titles = html_tree.xpath('//ul[@class="s-hotsearch-content"]/li/a/text()')
return titles
except requests.exceptions.RequestException as e:
print("请求出错:", e)
return []
url = "https://www.baidu.com"
titles = get_titles(url)
print(titles)
```
通过将获取标题的逻辑封装为函数,并添加了错误处理机制,可以提高代码的可读性和健壮性。这样,在其他地方需要获取标题时,只需调用该函数即可。
解决一下以下代码报错的import requests from lxml import etree url = 'https://www.shanghairanking.cn/institution' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } res = requests.get(url=url,headers=headers) print(res.status_code) html = etree.HTML(res.text) lis = html.xpath("//*[@id="__layout"]/div/div[2]/div[2]/div[1]") print(len(lis))
这段代码有一个小错误,就是在xpath的语句中双引号没有转义,需要改成单引号。修改后的代码如下:
```python
import requests
from lxml import etree
url = 'https://www.shanghairanking.cn/institution'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
res = requests.get(url=url, headers=headers)
print(res.status_code)
html = etree.HTML(res.text)
lis = html.xpath('//*[@id="__layout"]/div/div[2]/div[2]/div[1]')
print(len(lis))
```
这样就可以正确运行了,输出页面中指定元素的数量。
阅读全文
相关推荐














