怎么从html上正确抓取数据呀?

请问码友们我在爬取这个房地产数据的时候,为何从html上抓取信息失败了呀?代码显示print()输出值为空是怎么回事?明明selector路径是正确的。


for page in range(1, 5): 
    print('===========================正在下载第{}页数据================================'.format(page))
    
    time.sleep(3)
   
    url = 'https://sh/'.format(page)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
   
    
    response = requests.get(url=url, headers=headers)
    html_data = response.text #字符串

    
    selector = parsel.Selector(html_data)
    lis = selector.css('body > div.content > div.leftContent > ul > li')

    print(lis)
   
    

img

用xpath就够了,不需要parsel框架,多余了。

该回答引用ChatGPT
您好,我看起来您的代码中有缩进错误和其他的语法错误。这个问题可能是由于缩进、拼写错误等代码逻辑方面的错误引起的。

以下为修改后的代码:

import requests
import parsel
import time
import csv
from scrapy import Selector

for page in range(1, 5):
    print('===========================正在下载第{}页数据================================'.format(page))
    time.sleep(3)
    url = 'https://sh.lianjia.com/chengjiao/fengcheng/{}'.format(page) # URL应该包含page的值
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    html_data = response.text 
    selector = parsel.Selector(html_data)
    lis = selector.css('body > div.content > div.leftContent > ul > li') 
    print(lis)

以上代码应该可以正常获取HTML文档,使用CSS选择器找到所需的元素。请注意缩进、拼写和其他可能的语法错误,以确保代码能够正常运行。

引用GPT:可能是由于您的代码缩进问题,导致 lis 变量的赋值语句没有在 for 循环中执行,因此没有得到正确的结果。您可以将 lis 的赋值语句放在 for 循环中,以确保它在每个页面上都被正确执行。另外,您需要将 url 的 format 方法调用放在同一行,以便正确地格式化 URL。下面是更改后的代码示例:

import requests
import parsel
import time
import csv

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}

for page in range(1, 5):
    print('===========================正在下载第{}页数据================================'.format(page))
    time.sleep(3)
    url = 'https://sh.lianjia.com/chengjiao/fengcheng/{}/'.format(page)
    response = requests.get(url=url, headers=headers)
    html_data = response.text 
    selector = parsel.Selector(html_data)
    lis = selector.css('body > div.content > div.leftContent > ul > li')
    print(lis)

另外,需要注意,当您在 URL 中添加页面参数时,需要使用 {} 占位符来表示页码,否则 URL 将无法正确格式化。

您的代码中有一个问题:您的 URL 没有包含页码信息。您需要将页码信息添加到 URL 中,例如:

python
Copy code
url = 'https://sh.lianjia.com/chengjiao/fengcheng/pg{}/'.format(page)
这样才能正确获取不同页面的数据。

另外,如果您在运行代码时发现 selector.css() 返回值为空,可能是因为所选取的元素在 HTML 中不存在,或者您的选择器选择的元素不正确。您可以使用浏览器开发者工具检查页面中是否存在您要提取的元素,并且确保选择器正确。

最后,您可以添加一些调试信息,例如打印 HTML 数据,以帮助您进一步分析问题。例如:

python
Copy code
response = requests.get(url=url, headers=headers)
html_data = response.text
print(html_data) # 打印 HTML 数据
selector = parsel.Selector(html_data)
lis = selector.css('body > div.content > div.leftContent > ul > li')
print(lis)
这样可以看到页面返回的 HTML 数据,以及选择器选取的元素是否正确。