spider.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. """
  2. Scrapy 通用爬虫框架
  3. 提供基础的爬虫类、中间件和 Pipeline
  4. """
  5. import scrapy
  6. from scrapy.crawler import CrawlerProcess
  7. from scrapy.utils.project import get_project_settings
  8. class BasePharmSpider(scrapy.Spider):
  9. custom_settings = {
  10. "DOWNLOAD_DELAY": 3,
  11. "RANDOMIZE_DOWNLOAD_DELAY": True,
  12. "CONCURRENT_REQUESTS": 4,
  13. "CONCURRENT_REQUESTS_PER_DOMAIN": 2,
  14. "DOWNLOAD_TIMEOUT": 30,
  15. "RETRY_TIMES": 3,
  16. "RETRY_HTTP_CODES": [500, 502, 503, 504, 408, 429],
  17. "USER_AGENT": (
  18. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
  19. "AppleWebKit/537.36 (KHTML, like Gecko) "
  20. "Chrome/120.0.0.0 Safari/537.36"
  21. ),
  22. "DEFAULT_REQUEST_HEADERS": {
  23. "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  24. "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
  25. },
  26. "ROBOTSTXT_OBEY": True,
  27. "DOWNLOADER_MIDDLEWARES": {
  28. "scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
  29. "crawlers.middleware.RotateUserAgentMiddleware": 400,
  30. "crawlers.middleware.ProxyMiddleware": 410,
  31. },
  32. }
  33. def __init__(self, *args, **kwargs):
  34. super().__init__(*args, **kwargs)
  35. self.ua_pool = [
  36. "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0",
  37. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Version/17.1",
  38. "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/119.0.0.0",
  39. ]