Crawler data form использует веб-сайт Scrapy 1.5.0 - Python - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь отсканировать данные с веб-сайта Scrapy (1.5.0) - Python

Каталог проекта:

stack/
    scrapy.cfg           

    stack/            
        __init__.py

        items.py          

        pipelines.py      

        settings.py       

        spiders/         
            __init__.py
              stack_spider.py

Вот мои items.py

import scrapy

class StackItem(scrapy.Item):
    title = scrapy.Field()

а вот вот stack_spider.py

from scrapy import Spider
from scrapy.selector import Selector

from stack.items import StackItem

class StackSpider(Spider):
    name = "stack"
    allowed_domains = ["batdongsan.com.vn"]
    start_urls = [
        "https://batdongsan.com.vn/nha-dat-ban",
    ]

    def parse(self, response):
        questions = Selector(response).xpath('//div[@class="p-title"]/h3')

        for question in questions:
            item = StackItem()
            item['title'] = question.xpath(
                'a/text()').extract()[0]

            yield item

Я не знаю, почему я не могу сканировать данные, мне действительно нужна ваша помощь.Спасибо

Ответы [ 4 ]

0 голосов
/ 06 июня 2018

Установите User Agent

, перейдите в свои проекты scrapy settings.py

и вставьте его,

USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
0 голосов
/ 06 июня 2018

нашел ответ: http://edmundmartin.com/random-user-agent-requests-python/ нужно установить заголовок для прохождения предотвращения сканирования

0 голосов
/ 06 июня 2018

Для разбора каждой страницы вам нужно добавить немного кода.

import re

from scrapy import Spider
from scrapy.selector import Selector

class StackSpider(Spider):
    name = "batdongsan"
    allowed_domains = ["<DOMAIN>"]
    start_urls = [
        "https://<DOMAIN>/nha-dat-ban",
    ]

    def parse(self, response):
        questions = Selector(response).xpath('//div[@class="p-title"]/h3')

        # This part of code collect only titles. You need to add more fields to be collected if you need.
        for question in questions:
            title = question.xpath(
                'a/text()').extract_first().strip()
            yield {'title': title}

        if not re.search(r'\d+', response.url):
            # Now we have to go th
            url_prefix = response.css('div.background-pager-right-controls a::attr(href)').extract_first()
            url_last = response.css('div.background-pager-right-controls a::attr(href)').extract()[-1]
            max = re.findall(r'\d+', url_last)[0]
            for n in range(2, int(max)+1):
                next_page = url_prefix + '/p' + str(n)
                yield response.follow(next_page, callback=self.parse)

Заменить на свой домен.Также я не использовал класс Item в своем коде.

0 голосов
/ 06 июня 2018

Если вы просто хотите сканировать веб-сайт и получить исходный код, это может помочь.

import urllib.request as req

def imLS():
    url = "https://batdongsan.com.vn/nha-dat-ban"
    data = req.Request(url)
    resp = req.urlopen(data)
    respData = resp.read()
    print(respData)
imLS()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...