Для очистки одного сайта мне нужно отправить дубликаты строк, чтобы получить данные json. Я тестировал этот метод с запросами. Но это не работает, когда я использую Scrapy. В теле запроса нет дубликатов:
class MainSpider(scrapy.Spider):
name = 'main'
allowed_domains = ['ukonlinestores.co.uk']
# start_urls = ['https://ukonlinestores.co.uk/amazon-uk-sellers/']
search_url = 'https://ukonlinestores.co.uk/wp-admin/admin-ajax.php?action=get_wdtable&table_id=9'
handle_httpstatus_list = [400]
def parse_search(self, response):
inspect_response(response, self)
def start_requests(self):
data = {
'draw': '2',
'columns[0][data]': '0',
'columns[0][name]': 'wdt_ID',
'columns[0][searchable]': 'true',
'columns[0][orderable]': 'true',
'columns[0][orderable]': 'true',
'columns[0][search][value]': '',
'columns[0][search][value]': '',
'columns[0][search][regex]': 'false',
'columns[0][search][regex]': 'false',
'columns[1][data]': '1',
'columns[1][data]': '1',
'columns[1][name]': 'sellerid',
'columns[1][name]': 'sellerid',
'columns[1][searchable]': 'true',
'columns[1][searchable]': 'true',
'columns[1][orderable]': 'true',
'columns[1][orderable]': 'true',
}
yield scrapy.Request(
self.search_url,
callback=self.parse_search,
method='POST',
headers=headers,
body=json.dumps(data))
>>> request.body
b'{"columns[0][data]": "0", "columns[0][name]": "wdt_ID", "columns[0][orderable]": "true", "columns[0][search][regex]": "false", "columns[0][search][value]": "", "co
lumns[0][searchable]": "true", "columns[10][data]": "10", "columns[10][name]": "positive12months", "columns[10][orderable]": "true", "columns[10][search][regex]": "f
alse", "columns[10][search][value]": "", "columns[10][searchable]": "true", "columns[11][data]": "11", "columns[11][name]": "positivelifetime", "columns[11][orderabl
e]": "true", "columns[11][search][regex]": "false", "columns[11][search][value]": "", "columns[11][searchable]": "true", "columns[12][data]": "12", "columns[12][name
]": "count30day", "columns[12][orderable]": "true", "columns[12][search][regex]": "false", "columns[12][search][value]": "", "columns[12][searchable]": "true", "colu
mns[13][data]": "13", "columns[13][name]": "count90day", "columns[13][orderable]": "true",
Как я могу обойти эту функцию?
1 ответ
Вот как вы можете получить данные с помощью запросов. Вы должны перепроектировать HTTP-запросы. Чтобы получить доступ к https://ukonlinestores.co.uk/wp-admin /admin-ajax.php, вам необходимо воссоздать HTTP-запрос POST, используя только запрос, если вы должны включить параметры, файлы cookie, заголовки. Я обычно начинаю с простого запроса и наращиваю, здесь мне не нужны заголовки, но параметры и данные необходимы для получения данных JSON, которые вам нужны здесь.
Я обычно использую chrometools и копирую запрос на http://curl.trillworks.com. Таким образом я могу получить красиво отформатированные заголовки, файлы cookie и параметры.
Вы также можете использовать те же параметры и данные в скрипте scrapy.
Обратите внимание, глядя на полезные данные, вы не включили их много ... вероятно, поэтому вы не получили нужного ответа. Вот пример использования запросов для этого.
Пример кода
import requests
params = (
('action', 'get_wdtable'),
('table_id', '25'),
)
data = {
'draw': '1',
'columns[0][data]': '0',
'columns[0][name]': 'storeurl',
'columns[0][searchable]': 'true',
'columns[0][orderable]': 'true',
'columns[0][search][value]': '',
'columns[0][search][regex]': 'false',
'columns[1][data]': '1',
'columns[1][name]': 'positivefeedback',
'columns[1][searchable]': 'true',
'columns[1][orderable]': 'true',
'columns[1][search][value]': '',
'columns[1][search][regex]': 'false',
'columns[2][data]': '2',
'columns[2][name]': 'rank',
'columns[2][searchable]': 'true',
'columns[2][orderable]': 'true',
'columns[2][search][value]': '',
'columns[2][search][regex]': 'false',
'columns[3][data]': '3',
'columns[3][name]': 'storemarketplace',
'columns[3][searchable]': 'true',
'columns[3][orderable]': 'true',
'columns[3][search][value]': '',
'columns[3][search][regex]': 'false',
'columns[4][data]': '4',
'columns[4][name]': 'maincategory',
'columns[4][searchable]': 'true',
'columns[4][orderable]': 'true',
'columns[4][search][value]': '',
'columns[4][search][regex]': 'false',
'columns[5][data]': '5',
'columns[5][name]': 'noofproducts',
'columns[5][searchable]': 'true',
'columns[5][orderable]': 'true',
'columns[5][search][value]': '',
'columns[5][search][regex]': 'false',
'columns[6][data]': '6',
'columns[6][name]': 'fulfilmenttype',
'columns[6][searchable]': 'true',
'columns[6][orderable]': 'true',
'columns[6][search][value]': '',
'columns[6][search][regex]': 'false',
'columns[7][data]': '7',
'columns[7][name]': 'countlifetime',
'columns[7][searchable]': 'true',
'columns[7][orderable]': 'true',
'columns[7][search][value]': '',
'columns[7][search][regex]': 'false',
'order[0][column]': '2',
'order[0][dir]': 'asc',
'start': '0',
'length': '50',
'search[value]': '',
'search[regex]': 'false',
'wdtNonce': '78ce0f8f66'
}
response = requests.post('https://ukonlinestores.co.uk/wp-admin/admin-ajax.php', headers=headers, params=params, data=data)
data = response.json()
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.