使用xpath爬取网站的文字描述,在chrome中有用,但是在代码中就没有用了

jklf5
  • 6

问题描述:

我想爬取电影网站的描述信息,一开始用的是正则,但是不是很熟练,就用了xpath,xpath在chrome中可以使用,但是放到代码里就失效了,我用了自己写的xpath还有chrome获取的xpath(没有tbody的问题)都没有用。

(以 http://www.ygdy8.com/html/gnd... 为例)
我想要爬取的是以下文字信息:

clipboard.png

代码(一部分):

def getContent(url):
    html = ulr.urlopen('http://www.ygdy8.net%s' %url).read()
    con_text = html.decode('gb2312', 'ignore')
    data = etree.HTML(con_text)
    
    #reg = r'<div class="co_content8">(.+?)<p><strong><font color="#ff0000" size="4">'
    #reg = r'◎简  介 <br /><br />(.*?)<br />'
    #text = re.compile(reg).findall(con_text)
    #text = data.xpath('//*[@id="Zoom"]/span/p[1]/text()')  #chrome浏览器中获取
    #text = data.xpath('//div[@id="Zoom"]/span/p/text()')   #自己尝试的
    #text = data.xpath('/html/body/div/div/div[@class="bd2"]/div[@class="bd3"]/div[@class="bd3r"]/div[@class="co_area2"]/div[@class="co_content8"]/ul/div[@align="left"]/div[@id="Zoom"]/span/p/text()')   #从根目录处开始尝试查找
    
    if text:
        text = text[0]
    reg = r'<td style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(.+?)"'
    link = re.findall(reg,con_text)[0]
    return text,link
    

注释的地方就是有问题的地方

执行结果:

在chrome浏览器中使用xpath:
clipboard.png

在代码中使用xpath:

clipboard.png

尝试过直接获取所有p标签以下的内容,发现前面的一些文字可以获取,但是想要的信息获取不到。

clipboard.png

请问该如何实现爬取想要的信息,xpath和正则分别应该怎么写呢?

并且:

clipboard.png

对于这种已经转换为html信息的输出具体有什么意思

回复
阅读 3.3k
3 个回答
import requests
from lxml import etree

response = requests.get('http://www.ygdy8.com/html/gndy/dyzz/20170802/54644.html')
htmlStr = response.content.decode('gbk')
tree = etree.HTML(htmlStr)
info = tree.xpath('string(//div[@id="Zoom"]//p[1])')

print(info)

图片描述

你要看一下页面内容是不是动态加载的,浏览器里那是已经 js 加载过的了。

把html内容保存成文件,再用浏览器打开。如果有想要的内容,检查xpath;如果没有,可能被服务器反爬虫了。

宣传栏